home *** CD-ROM | disk | FTP | other *** search
/ Sound Fx / Sound Fx.iso / Software / UNZIPED / DWSTK / FINDSB.PAS < prev    next >
Pascal/Delphi Source File  |  1996-10-10  |  4KB  |  151 lines

  1. (******************************************************************************
  2. File:                          findsb.pas
  3. Version:                     2.22
  4. Tab stops:                 every 2 columns
  5. Project:                     FINDSB utility
  6. Copyright:                 1994-1995 DiamondWare, Ltd.    All rights reserved.
  7. Written:                     Keith Weiner & Erik Lorenzen
  8. Pascal Conversion: David A. Johndrow
  9. DPMI Version:      Tom Repstad
  10. Purpose:           Example code to autodetect and print out the sound hardware
  11. History:                     94/10/21 KW Started
  12.                                      94/11/11 DJ Converted
  13.                                      95/02/02 EL Cleaned up & Finalized
  14.                                      95/03/22 EL Finalized for 1.01
  15.                                      95/04/11 EL Finalized for 1.02
  16.                                      95/06/06 EL Finalized for 1.03, no changes
  17.                                      95/06/06 EL Finalized for 2.00, no changes
  18.                                      95/10/16 EL Finalized for 2.10, no changes
  19.                                      95/09/11 TR Protected Mode Version, new HexStr
  20.                                      95/10/18 EL Finalized for 2.20, no changes
  21.                                      95/12/07 EL Finalized for 2.21, no changes
  22.                                      96/10/10 EL Finalized for 2.22, no changes
  23. ******************************************************************************)
  24.  
  25.  
  26.  
  27. program findsb;
  28.  
  29. uses crt, err, dws;
  30.  
  31.  
  32. var
  33.     dov:        dws_DOPTR;
  34.     dres:     dws_DRPTR;
  35.  
  36.  
  37. function HexStr(d: word): string;
  38. const
  39.      hexchars: array [0..15] of char = '0123456789ABCDEF';
  40. var
  41.      i,j : integer;
  42.      str : string;
  43.      chr : char;
  44.  
  45. begin
  46.     str := '';
  47.  
  48.     for i := 3 downto 0 do
  49.     begin
  50.         j := i*4;
  51.         chr := hexchars[ (d shr j) and $F];
  52.  
  53.         if not ((str = '') and (chr = '0')) then
  54.         begin
  55.             str := str + chr;
  56.         end;
  57.     end;
  58.     HexStr := str;
  59. end;
  60.  
  61.  
  62. begin
  63.     new(dov);
  64.     new(dres);
  65.  
  66.     writeln;
  67.     writeln('FINDSB 2.22 is Copyright 1994-95, DiamondWare, Ltd.');
  68.     writeln('All rights reserved.');
  69.     writeln;
  70.     writeln;
  71.  
  72.     (*
  73.      . We need to set every field to -1 (65635) in dws_DETECTOVERRIDES struct;
  74.      . this tells the STK to autodetect everything.  Any other value
  75.      . overrides the autodetect routine, and will be accepted on
  76.      . faith, though the STK will verify it if possible.
  77.     *)
  78.     dov^.baseport := 65535;
  79.     dov^.digdma     := 65535;
  80.     dov^.digirq     := 65535;
  81.  
  82.     if (dws_DetectHardWare(dov, dres) = 0) then
  83.     begin
  84.         err_Display;
  85.         halt(65535);
  86.     end;
  87.  
  88.  
  89.     if (((dres^.capability and dws_capability_FM) = dws_capability_FM) or
  90.             ((dres^.baseport <> 904) and (dres^.baseport <> 65535))) then
  91.     begin
  92.         writeln('Base port is ',HexStr(dres^.baseport),' hex');
  93.         writeln('');
  94.  
  95.         if (dres^.mixtyp <> 1) then
  96.         begin
  97.             writeln('The sound hardware supports mixing.');
  98.             writeln('');
  99.         end
  100.         else
  101.         begin
  102.             writeln('Mixing will be done in software.');
  103.             writeln('');
  104.         end;
  105.  
  106.         if ((dres^.capability and dws_capability_FM) = dws_capability_FM) then
  107.         begin
  108.             writeln('The sound hardware supports FM music playback.');
  109.             writeln;
  110.         end
  111.         else
  112.         begin
  113.             writeln('Support for FM music playback not found.');
  114.             writeln('');
  115.         end;
  116.  
  117.         if ((dres^.capability and dws_capability_DIG) = dws_capability_DIG) then
  118.         begin
  119.             (* If we got here dws_DetectHardWare got PORT, IRQ, & DMA *)
  120.             writeln('The sound hardware supports digitized sound playback.');
  121.             writeln('The sound hardware uses DMA channel ',dres^.digdma,' and IRQ level ',dres^.digirq,'.');
  122.             writeln;
  123.         end
  124.         else if ((dres^.baseport <> 904) and (dres^.baseport <> 65535)) then
  125.         begin
  126.             (*
  127.              . If dres.baseport isn't either 388hex, or -1, then it's a valid
  128.              . baseport.    So if we got here, then we didn't find either IRQ
  129.              . level, and/or DMA channel.  In order to play digitized sounds,
  130.              . we need these settings as well.    In your application, you should
  131.              . ask the user.
  132.             *)
  133.             writeln('The sound hardware supports digitized sound playback,');
  134.             writeln('but we could not find the DMA channel and/or IRQ level.');
  135.  
  136.         end
  137.         else
  138.         begin
  139.             writeln('Support for digitized playback not found.');
  140.             writeln('');
  141.         end;
  142.  
  143.     end
  144.     else
  145.     begin
  146.         writeln('No sound hardware detected.');
  147.         writeln;
  148.     end;
  149.  
  150. end.
  151.